﻿using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Onshi.POS.Repositorios
{
    public class RepositorioSubRubrosArticulos : RepositorioEntidad<SubRubroArticulo, Int32, IServicioDatosSubRubrosArticulos>
    {
        #region Constructores

        public RepositorioSubRubrosArticulos()
            : base()
        {
        }

        #endregion

        #region Atributos

        private RepositorioRubrosArticulos repositorioRubrosArticulos = new RepositorioRubrosArticulos();

        #endregion

        #region Metodos

        protected override SubRubroArticulo FilaAEntidad(DataRow fila)
        {
            var subRubroArticulo = new SubRubroArticulo();
            subRubroArticulo.Id = (Int32)fila["IdSubRubroArticulo"];
            subRubroArticulo.Nombre = (String)fila["Nombre"];
            subRubroArticulo.Observaciones = (String)fila["Observaciones"];
            subRubroArticulo.Rubro = repositorioRubrosArticulos.DevolverPorId((Int32)fila["IdRubroArticulo"]);
            return subRubroArticulo;
        }

        public override SubRubroArticulo DevolverPorId(Int32 id)
        {
            var subRubroArticulo = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (subRubroArticulo == null)
                using (var ds = servicioDatos.SubRubrosArticulos_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        subRubroArticulo = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(subRubroArticulo);
                    }
            return subRubroArticulo;
        }

        public void Insertar(SubRubroArticulo subRubroArticulo)
        {
            subRubroArticulo.Id = servicioDatos.SubRubrosArticulos_Insertar(subRubroArticulo.Rubro.Id, subRubroArticulo.Nombre, subRubroArticulo.Observaciones);
        }

        public void Modificar(SubRubroArticulo subRubroArticulo)
        {
            servicioDatos.SubRubrosArticulos_Modificar(subRubroArticulo.Id, subRubroArticulo.Rubro.Id, subRubroArticulo.Nombre, subRubroArticulo.Observaciones);
        }

        public void Eliminar(SubRubroArticulo subRubroArticulo)
        {
            servicioDatos.SubRubrosArticulos_Eliminar(subRubroArticulo.Id);
            subRubroArticulo = null;
        }

        public List<SubRubroArticulo> DevolverTodos()
        {
            using (var ds = servicioDatos.SubRubrosArticulos_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        public void ModificarRubroArticulo(RubroArticulo rubroArticuloNuevo, RubroArticulo rubroArticuloViejo)
        {
            servicioDatos.SubRubrosArticulos_ModificarRubroArticulo(rubroArticuloNuevo.Id, rubroArticuloViejo.Id);
        }

        #endregion
    }
}